package com.test.demo.Interview.basis;

/**
 * final关键字
 * 修饰类：类不能被继承
 * 修饰方法：不能被子类重写，但是可以重载
 * 修饰变量：赋值之后就不能修改，
 * 	修饰成员变量：静态的成员变量必须声明时初始化或者在静态代码块中初始化，非静态成员变量在构造方法或者构造代码快中初始化。
 * 	修饰局部变量：可以不初始化声明，使用之前必须初始化，只能被初始化一次。
 *      如果是静态内部类引用了局部变量，其实是引用了这个局部变量的copy，因为外部类的有可能比内部的先销毁，但是内部类也会生成单独的class文件，
 *      所以内部类不一定会销毁，这时候为了还能引用外部类的局部变量，为了使这两个copy的变量一致，所以就用了final修饰不让他再次修改。
 */
public class FinalVar {
    final static int a = 0;//再声明的时候就需要赋值 或者静态代码块赋值
    /*
     static{
     a = 0;
     }
     */
    final int b ;//再声明的时候就需要赋值 或者代码块中赋值 或者构造器赋值
//    {
//b = 0;
//}


//    public FinalVar() {
//    }

    public FinalVar(int b) {
        this.b = b;
    }

    public static void main(String[] args) {
        final int localA; //局部变量只声明没有初始化，不会报错,与final无关。
        localA = 0;//在使用之前一定要赋值
    }
}

